package cliente.conta;

import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import mensagens.EnviaDados;
import mensagens.ManterItemConta;
import mensagens.ManterServico;
import mensagens.Mensagem;

import cliente.hospede.ExecutaCadastrarHospede;

public class CadastraItemConta extends AbstractAction {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Action executaCadastraItemConta;
	
	private JFrame 		tfCadastraItemConta;
	private JLabel 		lNumAp, lqtde, lItem;
	private JTextField 	tNumAp, tqtde;
	
	private JButton bInsere, bFecha;
	
	private Vector<String> servicos;
	
	private JComboBox cServ;
	
	public CadastraItemConta() {
		super("Cadastrar Despesa");
		this.putValue(Action.SHORT_DESCRIPTION, "Cadastra uma despesa de Hóspede no sistema");
		setExecutaCadastraItemConta(new ExecutaCadastrarItemConta(this));
	}

	public void actionPerformed(ActionEvent e) {
		
		// Cria um novo frame
		setTfCadastraItemConta(new JFrame("Cadastrar Despesa"));
		// Seta a operação default ao fechar o frame (no caso, é eliminar o frame da memória)
		getTfCadastraItemConta().setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		// Seta o container interno
		Container interno = this.getTfCadastraItemConta().getContentPane();
		// Ajusta o layout do Frame para um GridBagLayout
		GridBagConstraints cons = new GridBagConstraints();
		GridBagLayout layout = new GridBagLayout();
		interno.setLayout(layout);
		// Seta uma borda de 2px entre cada elemento do frame
		cons.insets = new Insets(2,2,2,2);
		
		// Componentes do Frame
		
		// Label do numero do apartamento
		setlNumAp(new JLabel("Apartamento"));
		cons.weightx 	= 0.25; 					// Ocupara 25% da linha
		cons.fill 		= GridBagConstraints.NONE;	// Não será redimensionado
		cons.gridx 		= 0;						// Ficará na coluna 0
		cons.gridy 		= 0;						// Ficará na linha 0
		interno.add(getlNumAp(), cons);
		
		// Texto do numero do apartamento
		settNumAp(new JTextField());
		cons.weightx	= 0.75;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		cons.gridx		= 1;
		cons.gridy		= 0;
		interno.add(gettNumAp(), cons);
		
		// Label da quantidade
		setLqtde(new JLabel("Quantidade"));
		cons.weightx	= 0.25;
		cons.fill		= GridBagConstraints.NONE;
		cons.gridx		= 0;
		cons.gridy		= 1;
		interno.add(getLqtde(), cons);
		
		// Texto da quantidade
		setTqtde(new JTextField("1"));
		cons.weightx	= 0.75;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		cons.gridx		= 1;
		cons.gridy		= 1;
		interno.add(getTqtde(), cons);
		
		// Label do serviço a ser adicionado
		setlItem(new JLabel("Serviço"));
		cons.weightx	= 0.25;
		cons.fill		= GridBagConstraints.NONE;
		cons.gridx		= 0;
		cons.gridy		= 2;
		interno.add(getlItem(), cons);
		
		// Le a lista de servicos do banco
		ManterServico ms = new ManterServico(5);
		Mensagem resposta = EnviaDados.enviarMensagem(ms);
		if(resposta instanceof ManterServico){
			ms = (ManterServico) resposta;
			setServicos(new Vector<String>(ms.getvServicos().size()));
			
			for (int k = 0; k < ms.getvServicos().size(); k++){
				getServicos().add(ms.getvServicos().get(k).getDescricao());
			}
			
			// Combo da lista de servicos
			setcServ(new JComboBox(getServicos()));
			cons.weightx	= 0.75;
			cons.fill		= GridBagConstraints.HORIZONTAL;
			cons.gridx		= 1;
			cons.gridy		= 2;
			interno.add(getcServ(), cons);
			
		} else {
			System.out.println("Erro, tipo de mensagem errada recebida!");
			return;
		}
		
		// Botao Insere
		setbInsere(new JButton("Inserir"));
		cons.weightx	= 0.5;
		cons.fill		= GridBagConstraints.NONE;
		cons.gridx		= 0;
		cons.gridy		= 3;
		getbInsere().addActionListener(executaCadastraItemConta);
		getbInsere().setActionCommand("inserir");
		interno.add(getbInsere(), cons);
		
		// Botao Fecha
		setbFecha(new JButton("Fechar"));
		cons.weightx	= 0.5;
		cons.gridx		= 1;
		cons.gridy		= 3;
		getbFecha().addActionListener(executaCadastraItemConta);
		getbFecha().setActionCommand("fecha");
		interno.add(getbFecha(), cons);
		
		getTfCadastraItemConta().setSize(300, 200);
		getTfCadastraItemConta().setVisible(true);
		
	}


	public void setTfCadastraItemConta(JFrame tfCadastraItemConta) {
		this.tfCadastraItemConta = tfCadastraItemConta;
	}


	public JFrame getTfCadastraItemConta() {
		return tfCadastraItemConta;
	}


	public void setlNumAp(JLabel lNumAp) {
		this.lNumAp = lNumAp;
	}


	public JLabel getlNumAp() {
		return lNumAp;
	}


	public void settNumAp(JTextField tNumAp) {
		this.tNumAp = tNumAp;
	}


	public JTextField gettNumAp() {
		return tNumAp;
	}

	public void setExecutaCadastraItemConta(Action executaCadastraItemConta) {
		this.executaCadastraItemConta = executaCadastraItemConta;
	}

	public Action getExecutaCadastraItemConta() {
		return executaCadastraItemConta;
	}

	public void setLqtde(JLabel lqtde) {
		this.lqtde = lqtde;
	}

	public JLabel getLqtde() {
		return lqtde;
	}

	public void setTqtde(JTextField tqtde) {
		this.tqtde = tqtde;
	}

	public JTextField getTqtde() {
		return tqtde;
	}

	public void setlItem(JLabel lItem) {
		this.lItem = lItem;
	}

	public JLabel getlItem() {
		return lItem;
	}

	public void setServicos(Vector<String> servicos) {
		this.servicos = servicos;
	}

	public Vector<String> getServicos() {
		return servicos;
	}

	public void setcServ(JComboBox cServ) {
		this.cServ = cServ;
	}

	public JComboBox getcServ() {
		return cServ;
	}

	public JButton getbInsere() {
		return bInsere;
	}

	public void setbInsere(JButton bInsere) {
		this.bInsere = bInsere;
	}

	public JButton getbFecha() {
		return bFecha;
	}

	public void setbFecha(JButton bFecha) {
		this.bFecha = bFecha;
	}

}
